using System;
using System.Collections;
using Curriculum.Business.LectorMetadatos;

namespace Curriculum.Business.Manejadores
{
	/// <summary>
	/// Summary description for MasterData.
	/// </summary>
	public class MasterData
	{
		private string _idVersion;
		private static MasterData instancia = null;
		private ManejadorListasValores manejadorListasValores;
		private ManejadorTiposDatos manejadorTiposDatos;
		private ManejadorAtributos manejadorAtributos;
		
		private MasterData(string idVersion)
		{
			this._idVersion = idVersion;
			/*manejadorAtributos = new ManejadorAtributos();
			manejadorListasValores = new ManejadorListasValores();
			manejadorTiposDatos = new ManejadorTiposDatos();*/
		}

		public string GetIdVersion()
		{
			return this._idVersion;
		}

		/// <summary>
		/// si la instancia no existe la crea.
		/// </summary>
		/// <param name="idVersion"></param>
		/// <returns></returns>
		public static MasterData GetInstancia(string idVersion)
		{
			if (instancia == null)
			{
				instancia = new MasterData(idVersion);
				instancia.manejadorAtributos = new ManejadorAtributos(idVersion);
				instancia.manejadorListasValores = new ManejadorListasValores(idVersion);
				instancia.manejadorTiposDatos = new ManejadorTiposDatos(idVersion);				
			}
			return instancia;
		}

		/// <summary>
		/// si la instancia no existe devuelve null
		/// </summary>
		/// <returns></returns>
		public static MasterData GetInstancia()
		{
			return instancia;
		}

		public void Reset()
		{
			instancia = null;
		}	

		public bool EsAtributoObligatorio(string idAtributo)
		{
			return (!GetAtributo(idAtributo).opcional);
		}
		public Atributo GetAtributo(string idAtributo)
		{
			return instancia.manejadorAtributos.GetAtributo(idAtributo);
		}
		public string ObtenerTipo(string idTipoDato)
		{
			return instancia.manejadorTiposDatos.ObtenerTipo(idTipoDato);
		}
		public IList GetListaValores(string idAntecedente, string idAtributo)
		{
			return instancia.manejadorListasValores.GetListaValores(idAntecedente,idAtributo);
		}
		public ItemValor GetItemListaValores(string idItemLista)
		{
			return instancia.manejadorListasValores.GetItemListaValores(idItemLista);
		}
	}
}
